package main

// 152. 乘积最大子数组
func main() {

}

func maxProduct(nums []int) int {
	if len(nums) == 0 {
		return 0
	}
	preMaxRes := make([]int, len(nums))
	preMinRes := make([]int, len(nums))

	preMaxRes[0] = nums[0]
	preMinRes[0] = nums[0]

	maxRes := preMaxRes[0]
	for i := 1; i < len(nums); i++ {
		preMaxRes[i] = maxInt4(maxInt4(preMaxRes[i-1]*nums[i], preMinRes[i-1]*nums[i]), nums[i])
		preMinRes[i] = minInt4(minInt4(preMaxRes[i-1]*nums[i], preMinRes[i-1]*nums[i]), nums[i])

		maxRes = maxInt4(preMaxRes[i], maxRes)
	}

	return maxRes
}

func maxInt4(int1, int2 int) int {
	if int1 > int2 {
		return int1
	}
	return int2
}
func minInt4(int1, int2 int) int {
	if int1 > int2 {
		return int2
	}
	return int1
}

/**
给你一个整数数组 nums ，请你找出数组中乘积最大的非空连续
子数组
（该子数组中至少包含一个数字），并返回该子数组所对应的乘积。

测试用例的答案是一个 32-位 整数。

示例 1:

输入: nums = [2,3,-2,4]
输出: 6
解释: 子数组 [2,3] 有最大乘积 6。
示例 2:

输入: nums = [-2,0,-1]
输出: 0
解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。

提示:

1 <= nums.length <= 2 * 104
-10 <= nums[i] <= 10
nums 的任何子数组的乘积都 保证 是一个 32-位 整数
*/
